package com.xjh.basestudy.javabase.streamandlambda;

/**
 * @author XuJianHua
 * @version 1.0
 * @company 湖南安第斯信息科技有限公司, 版权所有
 * @date 2022/6/25 17:47
 */
public class OuterClass {

    private int num = 10;

    // 一般来说内部类用private修饰，目的是为了不让外界直接调用内部类
    private class Inner {
        public void innerMethod() {
            //成员内部类可以无条件访问外部类变量及方法
            System.out.println("内部类直接调用外部类的属性并打印===" + num);

        }
    }
    // 可以让外界访问的内部类
    public class Inner2 {
        public void innerMethod() {
            //成员内部类可以无条件访问外部类变量及方法
            System.out.println("内部类直接调用外部类的属性并打印===" + num);

        }
    }


    // 写个方法让外部类创建内部类对象并调用内部类方法
    public void outerMethod() {
        //外部类调用内部类方法需要创建内部类对象
        Inner i = new Inner();
        i.innerMethod();
    }

    // 局部内部类（内部类在方法内部）
    public void test() {
        class InnerClass {
            private String name;
            final static String test = "1";

            public InnerClass(String name) {
                super();
                this.name = name;
            }

            public void say(String str) {
                System.out.println(name + ":" + str);
            }
        }
        new InnerClass("test").say("hello");
    }
}
